home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / comm / mail / YamNet.lha / rexxtra12.lha / rexx / UnARK.rexx < prev   
OS/2 REXX Batch file  |  1990-03-18  |  2KB  |  99 lines

  1. /* UnARK.rexx */
  2.  
  3. /*
  4.      Format
  5.  
  6.        UnARK [FILE] <file> [TO <dir>]
  7.  
  8.    Extracts files from ARC, ZOO, PAK, ZIP, or LHARC format.
  9.    TO argument specifies destination directory.
  10.  
  11. */
  12.  
  13. signal on failure; signal off error; signal on syntax; signal on break_c
  14. options failat 10
  15. call addlib 'rexxextra.library',-20,-30,0
  16.  
  17. facility = 'UnARK'
  18. retcode = 0
  19. slog = facility||pragma('ID')||'Sorc:'
  20. dlog = facility||pragma('ID')||'Dest:'
  21. cmd. = 'BAD'
  22. cmd.ARC = 'c:arc x'
  23. cmd.ZOO = 'c:zoo xO//'
  24. cmd.PAK = ''
  25. cmd.LZH = 'c:lharc -a -r -P-1 -m x'
  26. cmd.ZIP = 'c:UnZip'
  27. types = 'ZOO ARC PAK ZIP LZH BAD'
  28.  
  29. dtemplate = 'FILE/A,TO/K'
  30. ttemplate = 'TO/K,FILE/A'
  31. args.=''
  32.  
  33. parse arg g_c
  34. do while g_c='?'
  35.   options prompt dtemplate': ' /* this template is      */
  36.   parse pull g_c           /* displayed to the user */
  37.   if g_c='?' then do
  38.     g_s=sourceline(3)
  39.     if pos('/*',g_s)=0 then break; if pos('*/',g_s)>0 then break
  40.     say
  41.     g_s=sourceline(4)
  42.     do i=5 while pos('*/',g_s)=0; say g_s; g_s=sourceline(i); end
  43.     say
  44.     end
  45.   end
  46. interpret Cparse(g_c,ttemplate,'args')
  47. if args.ERRCODE > 1 then do; say facility'-E-BADARGS,' args.ERRTEXT; exit 5; end
  48.  
  49. /*
  50.    Body of code
  51. */
  52.  
  53. 'assign' slog '""'
  54. if ~exists(args.TO) then 'Makedir' args.TO
  55. 'assign' dlog '"'args.TO'"'
  56. 'pushcd 'dlog
  57.  
  58. sfile = Fparse(slog,args.FILE)
  59. ftype = upper(right(sfile,3))
  60. doit = cmd.ftype
  61. if doit = 'BAD' then do
  62.   do i = 1 for words(types) until exists(sfile'.'ans)
  63.     ans = word(types,i)
  64.     end
  65.   if ans = 'BAD' then do
  66.     say facility'-E-NOTFOUND, Could not locate archive file:' sfile
  67.     retcode = 5
  68.     signal GetOut
  69.     end
  70.   doit = cmd.ans
  71.   sfile = sfile'.'ans
  72.   end
  73. say facility'-S-CMD,' doit sfile
  74. ''doit sfile
  75. retcode = rc
  76.  
  77. GetOut:
  78. 'popcd'
  79. 'Assign' slog
  80. 'Assign' dlog
  81. exit retcode
  82.  
  83. /* E N D */
  84.  
  85. /* Error labels follow */
  86.  
  87. break_c:
  88. break_d:
  89. break_e:
  90. break_f:
  91.   say facility'-E-BREAK, Control-C interrupt'; retcode = 20; signal GetOut
  92. failure:
  93.   say facility'-E-FAIL, Line:' sigl', Error:' rc; retcode = rc; signal GetOut
  94. syntax:
  95.   say facility'-E-SYNTAX, Line:' sigl', Error:' rc; retcode = rc; signal GetOut
  96. error:
  97.   say facility'-E-ERROR, Line:' sigl', Error:' rc; retcode = rc; signal GetOut
  98.  
  99.